{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 320,
   "id": "0b11532d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Defaulting to user installation because normal site-packages is not writeable\n",
      "Looking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/\n",
      "Requirement already satisfied: pandas in ./.local/lib/python3.6/site-packages (1.1.5)\n",
      "Requirement already satisfied: matplotlib in ./.local/lib/python3.6/site-packages (3.3.4)\n",
      "Requirement already satisfied: seaborn in ./.local/lib/python3.6/site-packages (0.11.2)\n",
      "Requirement already satisfied: sklearn in ./.local/lib/python3.6/site-packages (0.0.post1)\n",
      "Requirement already satisfied: xgboost in ./.local/lib/python3.6/site-packages (1.5.2)\n",
      "Requirement already satisfied: lightgbm in ./.local/lib/python3.6/site-packages (3.3.3)\n",
      "Collecting networkx\n",
      "  Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/f3/b7/c7f488101c0bb5e4178f3cde416004280fd40262433496830de8a8c21613/networkx-2.5.1-py3-none-any.whl (1.6 MB)\n",
      "\u001b[K     |████████████████████████████████| 1.6 MB 7.1 MB/s eta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: pytz>=2017.2 in ./.local/lib/python3.6/site-packages (from pandas) (2022.6)\n",
      "Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.6/site-packages (from pandas) (2.8.2)\n",
      "Requirement already satisfied: numpy>=1.15.4 in ./.local/lib/python3.6/site-packages (from pandas) (1.19.5)\n",
      "Requirement already satisfied: kiwisolver>=1.0.1 in ./.local/lib/python3.6/site-packages (from matplotlib) (1.3.1)\n",
      "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 in /usr/local/lib/python3.6/site-packages (from matplotlib) (2.4.7)\n",
      "Requirement already satisfied: pillow>=6.2.0 in ./.local/lib/python3.6/site-packages (from matplotlib) (8.4.0)\n",
      "Requirement already satisfied: cycler>=0.10 in ./.local/lib/python3.6/site-packages (from matplotlib) (0.11.0)\n",
      "Requirement already satisfied: scipy>=1.0 in ./.local/lib/python3.6/site-packages (from seaborn) (1.5.4)\n",
      "Requirement already satisfied: wheel in ./.local/lib/python3.6/site-packages (from lightgbm) (0.37.1)\n",
      "Requirement already satisfied: scikit-learn!=0.22.0 in ./.local/lib/python3.6/site-packages (from lightgbm) (0.24.2)\n",
      "Collecting decorator<5,>=4.3\n",
      "  Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/ed/1b/72a1821152d07cf1d8b6fce298aeb06a7eb90f4d6d41acec9861e7cc6df0/decorator-4.4.2-py2.py3-none-any.whl (9.2 kB)\n",
      "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.6/site-packages (from python-dateutil>=2.7.3->pandas) (1.16.0)\n",
      "Requirement already satisfied: joblib>=0.11 in ./.local/lib/python3.6/site-packages (from scikit-learn!=0.22.0->lightgbm) (1.1.1)\n",
      "Requirement already satisfied: threadpoolctl>=2.0.0 in ./.local/lib/python3.6/site-packages (from scikit-learn!=0.22.0->lightgbm) (3.1.0)\n",
      "Installing collected packages: decorator, networkx\n",
      "Successfully installed decorator-4.4.2 networkx-2.5.1\n",
      "\u001b[33mWARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.\n",
      "You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.\u001b[0m\n"
     ]
    }
   ],
   "source": [
    "!pip3 install pandas matplotlib seaborn sklearn xgboost lightgbm networkx"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ded06a2b",
   "metadata": {},
   "source": [
    "## Part1 赛题背景\n",
    "\n",
    "提高中小商家的数字化经营能力，是我国数字经济做强做优做大的关键基础，也是推动数字技术与实体经济深度融合的关键路径之一。中小商家通过分发数字消费券，提升其数字化经营的收益率和效率，是其数字化经营能力的重要标志之一，但同时也面临着长尾客户及消费券数量多、非结构化数据异质性强等挑战。本赛道围绕中小商家数字消费券分发这一关键问题，考察选手如何利用多种非结构化数据，如用户历史行为序列、用户间关系图、消费券知识图谱等，来帮助提高数字消费券的分发精度，从而提高中小商家的数字化经营能力。\n",
    "\n",
    "\n",
    "## Part2 数据说明\n",
    "\n",
    "本赛题会向选手提供一段时间内消费券向用户展示和被用户领取的数据，并要求选手预测在这段时间以后用户对消费券的领取行为。为了尽可能还原真实的工业数据环境，本赛题还会向选手提供用户和消费券的基础特征、用户间关系以及消费券知识图谱等数据，同时确保这些数据的采集和构造都是发生在待预测时间段之前。详细的数据说明如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "id": "ecb438fe",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "import lightgbm\n",
    "from lightgbm import LGBMClassifier "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "37fd57d0",
   "metadata": {},
   "outputs": [],
   "source": [
    "train = pd.read_json('/home/admin/workspace/job/input/train.jsonl', lines=True)\n",
    "user_feat = pd.read_csv('/home/admin/workspace/job/input/resources/user_feat.csv', )\n",
    "item_feat = pd.read_csv('/home/admin/workspace/job/input/resources/item_feat.csv', )\n",
    "uu_graph = pd.read_csv(\"/home/admin/workspace/job/input/resources/uu_graph.csv\")\n",
    "mkt_kg_graph = pd.read_csv('/home/admin/workspace/job/input/resources/mkt_kg_graph.csv', )\n",
    "test = pd.read_json('/home/admin/workspace/job/input/test.jsonl', lines=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f68f5a0b",
   "metadata": {},
   "source": [
    "### 消费券展示/领取 (train)\n",
    "\n",
    "包含一段时间内消费券向用户展示和被用户领取的数据，每行表示一次展示。\n",
    "\n",
    "| **列名** | **涵义**                                                     |\n",
    "| -------- | ------------------------------------------------------------ |\n",
    "| id       | 仅作为数据的标识，内容为从 0 开始编号的索引值                |\n",
    "| log_time | 展示时间索引，按展示时间戳从早到晚排序后，从 0 开始编号的索引值 |\n",
    "| user_id  | 用户标识，从 0 开始编号的索引值                              |\n",
    "| item_id  | 消费券标识，从 0 开始编号的索引值                            |\n",
    "| label    | 本次展示的消费券被用户领取时为 1，否则为 0                   |\n",
    "| dt       | 本次展示对应日期的天级相对时间（如 0 代表第一天的数据）      |\n",
    "\n",
    "### 用户基础特征 (user_feat)\n",
    "\n",
    "包含所有用户的基础特征，每行表示一位用户。\n",
    "\n",
    "| **列名**   | **涵义**                                                     |\n",
    "| ---------- | ------------------------------------------------------------ |\n",
    "| user_id    | 用户标识，从 0 开始编号的索引值                              |\n",
    "| gender     | 性别（含性别未知）                                           |\n",
    "| age        | 年龄（已对实际年龄做分档处理）                               |\n",
    "| occupation | 用户职业的索引                                               |\n",
    "| entity_cnt | 用户历史行为的标签及频次，标签由业务专家产出，能反映用户的行为类型（例如喝咖啡、打车等）。标签经过脱敏处理为从 0 开始编号的索引值。 数据格式为 k1:v1,k2:v2,...,kn:vn，其中 ki 为标签标识, vi 为经过缩放处理的频次。 |\n",
    "\n",
    "### 消费券基础特征 (item_feat)\n",
    "\n",
    "包含所有消费券的基础特征，每行表示一张消费券。\n",
    "\n",
    "| **列名**                     | **涵义**                                                     |\n",
    "| ---------------------------- | ------------------------------------------------------------ |\n",
    "| item_id                      | 消费券标识，从 0 开始编号的索引值                            |\n",
    "| category_l1_name             | 消费券所属一级类目，从 0 开始编号的索引值                    |\n",
    "| category_l2_name             | 消费券所属二级类目，从 0 开始编号的索引值                    |\n",
    "| category_l3_name             | 消费券所属三级类目，从 0 开始编号的索引值                    |\n",
    "| voucher_benefit_floor_amount | 消费券使用门槛，即使用时原订单需要支付的最低金额（满减优惠券），或商品原价格（商品优惠券）（单位：分）。 |\n",
    "| voucher_benefit_amount       | 消费券优惠金额（单位：分）                                   |\n",
    "\n",
    "### 用户间关系 (uu_graph)\n",
    "\n",
    "包含上述用户间的社交关系，每行表示一个关系。\n",
    "\n",
    "| **列名**      | **涵义**                                                |\n",
    "| ------------- | ------------------------------------------------------- |\n",
    "| left_user_id  | 用户标识，从 0 开始编号的索引值（与用户基础特征表对齐） |\n",
    "| right_user_id | 用户标识，从 0 开始编号的索引值（与用户基础特征表对齐） |\n",
    "\n",
    "### 消费券图谱 (mkt_kg_graph)\n",
    "\n",
    "描述消费券与其他实体（小程序、商家、品牌）关联的知识图谱，每行表示图谱中的一条边。\n",
    "\n",
    "| **列名**           | **涵义**                                                     |\n",
    "| ------------------ | ------------------------------------------------------------ |\n",
    "| source_entity_id   | 起始实体标识，每种类型实体的标识都是从 0 开始编号的索引值。其中消费券标识与消费券基础特征中的券 ID 为统一 ID 体系。 |\n",
    "| target_entity_id   | 终止实体标识，每种类型实体的标识都是从 0 开始编号的索引值。其中消费券标识与消费券基础特征中的券 ID 为统一 ID 体系。 |\n",
    "| source_entity_type | 起始实体类型，包括消费券、小程序、商家、品牌共 4 种类型实体  |\n",
    "| target_entity_type | 终止实体类型，包括消费券、小程序、商家、品牌共 4 种类型实体  |\n",
    "\n",
    "*注：实体类型+实体标识是知识图谱中每个节点的唯一标识。*\n",
    "\n",
    "### A/B 榜测试数据 (test)\n",
    "\n",
    "A/B  榜使用的测试数据是“消费券展示/领取”数据表中时间段之后发生的消费券展示记录，每行包含一个用户标识和一个消费券标识，表示向该用户展示了该消费券（相同的记录已去重），选手需要对每行数据进行预测，即预测该用户是否会领取该消费券。其中 A 榜和 B 榜会分别从中随机选取部分数据计算对应榜单的指标。\n",
    "\n",
    "| **列名** | **涵义**                                      |\n",
    "| -------- | --------------------------------------------- |\n",
    "| id       | 仅作为数据的标识，内容为从 0 开始编号的索引值 |\n",
    "| user_id  | 用户标识，从 0 开始编号的索引值               |\n",
    "| item_id  | 消费券标识，从 0 开始编号的索引值             |"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "df1283aa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>log_time</th>\n",
       "      <th>label</th>\n",
       "      <th>dt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>41002</td>\n",
       "      <td>385</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>18880</td>\n",
       "      <td>18</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id  user_id  item_id  log_time  label  dt\n",
       "0   0    41002      385         0      0   0\n",
       "1   1    18880       18         1      0   0"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "33f0486c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>log_time</th>\n",
       "      <th>label</th>\n",
       "      <th>dt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1043215</td>\n",
       "      <td>1043215</td>\n",
       "      <td>1043215</td>\n",
       "      <td>1043215</td>\n",
       "      <td>1043215</td>\n",
       "      <td>1043215</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>521607</td>\n",
       "      <td>89344</td>\n",
       "      <td>628</td>\n",
       "      <td>519943</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>301150</td>\n",
       "      <td>52257</td>\n",
       "      <td>467</td>\n",
       "      <td>300224</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>260803</td>\n",
       "      <td>44002</td>\n",
       "      <td>246</td>\n",
       "      <td>260183</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>521607</td>\n",
       "      <td>89448</td>\n",
       "      <td>511</td>\n",
       "      <td>519765</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>782410</td>\n",
       "      <td>134543</td>\n",
       "      <td>998</td>\n",
       "      <td>779962</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1043214</td>\n",
       "      <td>180610</td>\n",
       "      <td>1695</td>\n",
       "      <td>1040174</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            id  user_id  item_id  log_time    label       dt\n",
       "count  1043215  1043215  1043215   1043215  1043215  1043215\n",
       "mean    521607    89344      628    519943        0        2\n",
       "std     301150    52257      467    300224        0        1\n",
       "min          0        0        0         0        0        0\n",
       "25%     260803    44002      246    260183        0        1\n",
       "50%     521607    89448      511    519765        0        2\n",
       "75%     782410   134543      998    779962        0        4\n",
       "max    1043214   180610     1695   1040174        1        5"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.describe().astype(int)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "89398224",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>gender</th>\n",
       "      <th>age</th>\n",
       "      <th>occupation</th>\n",
       "      <th>entity_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>27948</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>228:0.0,1230:0.6931471805599453,2369:0.0,282:4...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id  gender  age  occupation  \\\n",
       "0    27948     1.0  2.0        19.0   \n",
       "\n",
       "                                          entity_cnt  \n",
       "0  228:0.0,1230:0.6931471805599453,2369:0.0,282:4...  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_feat.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "c4d2c497",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>gender</th>\n",
       "      <th>age</th>\n",
       "      <th>occupation</th>\n",
       "      <th>entity_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>180611.000000</td>\n",
       "      <td>180335.000000</td>\n",
       "      <td>180201.000000</td>\n",
       "      <td>93714.000000</td>\n",
       "      <td>180179</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unique</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>179940</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>top</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1075:0.6931471805599453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>freq</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>90305.000000</td>\n",
       "      <td>1.633881</td>\n",
       "      <td>2.025505</td>\n",
       "      <td>16.452974</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>52138.049072</td>\n",
       "      <td>0.482066</td>\n",
       "      <td>0.946319</td>\n",
       "      <td>5.791035</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>45152.500000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>90305.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>19.000000</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>135457.500000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>19.000000</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>180610.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              user_id         gender            age    occupation  \\\n",
       "count   180611.000000  180335.000000  180201.000000  93714.000000   \n",
       "unique            NaN            NaN            NaN           NaN   \n",
       "top               NaN            NaN            NaN           NaN   \n",
       "freq              NaN            NaN            NaN           NaN   \n",
       "mean     90305.000000       1.633881       2.025505     16.452974   \n",
       "std      52138.049072       0.482066       0.946319      5.791035   \n",
       "min          0.000000       0.000000       0.000000      0.000000   \n",
       "25%      45152.500000       1.000000       1.000000     11.000000   \n",
       "50%      90305.000000       2.000000       2.000000     19.000000   \n",
       "75%     135457.500000       2.000000       3.000000     19.000000   \n",
       "max     180610.000000       2.000000       4.000000     25.000000   \n",
       "\n",
       "                     entity_cnt  \n",
       "count                    180179  \n",
       "unique                   179940  \n",
       "top     1075:0.6931471805599453  \n",
       "freq                         36  \n",
       "mean                        NaN  \n",
       "std                         NaN  \n",
       "min                         NaN  \n",
       "25%                         NaN  \n",
       "50%                         NaN  \n",
       "75%                         NaN  \n",
       "max                         NaN  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_feat.describe(include='all')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "6574429e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_id</th>\n",
       "      <th>category_l1_name</th>\n",
       "      <th>category_l2_name</th>\n",
       "      <th>category_l3_name</th>\n",
       "      <th>voucher_benefit_floor_amount</th>\n",
       "      <th>voucher_benefit_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>385</td>\n",
       "      <td>5.0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>128.0</td>\n",
       "      <td>19000.0</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   item_id  category_l1_name  category_l2_name  category_l3_name  \\\n",
       "0      385               5.0              38.0             128.0   \n",
       "\n",
       "   voucher_benefit_floor_amount  voucher_benefit_amount  \n",
       "0                       19000.0                   500.0  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "item_feat.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "65c1336f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_id</th>\n",
       "      <th>category_l1_name</th>\n",
       "      <th>category_l2_name</th>\n",
       "      <th>category_l3_name</th>\n",
       "      <th>voucher_benefit_floor_amount</th>\n",
       "      <th>voucher_benefit_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1716.000000</td>\n",
       "      <td>1613.000000</td>\n",
       "      <td>1613.000000</td>\n",
       "      <td>1613.000000</td>\n",
       "      <td>1693.000000</td>\n",
       "      <td>1712.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>857.500000</td>\n",
       "      <td>7.137632</td>\n",
       "      <td>24.436454</td>\n",
       "      <td>87.818971</td>\n",
       "      <td>4748.106320</td>\n",
       "      <td>6777.648949</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>495.510848</td>\n",
       "      <td>2.471355</td>\n",
       "      <td>13.556900</td>\n",
       "      <td>41.487174</td>\n",
       "      <td>37284.411981</td>\n",
       "      <td>20789.136088</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>428.750000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>50.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>50.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>857.500000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>103.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>990.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1286.250000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>31.000000</td>\n",
       "      <td>125.000000</td>\n",
       "      <td>2500.000000</td>\n",
       "      <td>3000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1715.000000</td>\n",
       "      <td>9.000000</td>\n",
       "      <td>51.000000</td>\n",
       "      <td>156.000000</td>\n",
       "      <td>1000000.000000</td>\n",
       "      <td>306058.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           item_id  category_l1_name  category_l2_name  category_l3_name  \\\n",
       "count  1716.000000       1613.000000       1613.000000       1613.000000   \n",
       "mean    857.500000          7.137632         24.436454         87.818971   \n",
       "std     495.510848          2.471355         13.556900         41.487174   \n",
       "min       0.000000          0.000000          0.000000          0.000000   \n",
       "25%     428.750000          8.000000         14.000000         50.000000   \n",
       "50%     857.500000          8.000000         25.000000        103.000000   \n",
       "75%    1286.250000          8.000000         31.000000        125.000000   \n",
       "max    1715.000000          9.000000         51.000000        156.000000   \n",
       "\n",
       "       voucher_benefit_floor_amount  voucher_benefit_amount  \n",
       "count                   1693.000000             1712.000000  \n",
       "mean                    4748.106320             6777.648949  \n",
       "std                    37284.411981            20789.136088  \n",
       "min                        0.000000                0.000000  \n",
       "25%                       10.000000               50.000000  \n",
       "50%                       10.000000              990.000000  \n",
       "75%                     2500.000000             3000.000000  \n",
       "max                  1000000.000000           306058.000000  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "item_feat.describe(include='all')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "ef439f9f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>left_user_id</th>\n",
       "      <th>right_user_id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>86219</td>\n",
       "      <td>172571</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   left_user_id  right_user_id\n",
       "0         86219         172571"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "uu_graph.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "880c6524",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>source_entity_id</th>\n",
       "      <th>target_entity_id</th>\n",
       "      <th>source_entity_type</th>\n",
       "      <th>target_entity_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>141</td>\n",
       "      <td>8579</td>\n",
       "      <td>app</td>\n",
       "      <td>shop</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   source_entity_id  target_entity_id source_entity_type target_entity_type\n",
       "0               141              8579                app               shop"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mkt_kg_graph.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "9d0e8f81",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>24731</td>\n",
       "      <td>1099</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id  user_id  item_id\n",
       "0   0    24731     1099"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8baad73d",
   "metadata": {},
   "source": [
    "## Part3 数据分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "1d1c5e37",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>gender</th>\n",
       "      <th>age</th>\n",
       "      <th>occupation</th>\n",
       "      <th>entity_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>27948</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>228:0.0,1230:0.6931471805599453,2369:0.0,282:4...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>36424</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>231:1.0986122886681098,1075:1.6094379124341003...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id  gender  age  occupation  \\\n",
       "0    27948     1.0  2.0        19.0   \n",
       "1    36424     1.0  1.0        19.0   \n",
       "\n",
       "                                          entity_cnt  \n",
       "0  228:0.0,1230:0.6931471805599453,2369:0.0,282:4...  \n",
       "1  231:1.0986122886681098,1075:1.6094379124341003...  "
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_feat.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "1bca025b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.0    114339\n",
       "1.0     65968\n",
       "0.0        28\n",
       "Name: gender, dtype: int64"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_feat['gender'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "a90b14fd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.0    72510\n",
       "1.0    57180\n",
       "3.0    32578\n",
       "4.0    16266\n",
       "0.0     1667\n",
       "Name: age, dtype: int64"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_feat['age'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "67de0301",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "gender  age\n",
       "1.0     0.0    0.011637\n",
       "        1.0    0.299656\n",
       "        2.0    0.403238\n",
       "        3.0    0.179095\n",
       "        4.0    0.106374\n",
       "2.0     0.0    0.007875\n",
       "        1.0    0.327494\n",
       "        2.0    0.401892\n",
       "        3.0    0.181763\n",
       "        4.0    0.080977\n",
       "Name: age, dtype: float64"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_feat.groupby('gender')['age'].value_counts(normalize=True).sort_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "62846941",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "gender  occupation\n",
       "0.0     11.0          0.750000\n",
       "        19.0          0.250000\n",
       "1.0     0.0           0.003548\n",
       "        1.0           0.003775\n",
       "        2.0           0.004286\n",
       "        3.0           0.059777\n",
       "        4.0           0.008827\n",
       "        5.0           0.012574\n",
       "        6.0           0.002413\n",
       "        7.0           0.002299\n",
       "        8.0           0.007891\n",
       "        9.0           0.002640\n",
       "        10.0          0.003832\n",
       "        11.0          0.136414\n",
       "        12.0          0.000681\n",
       "        13.0          0.000823\n",
       "        14.0          0.001987\n",
       "        15.0          0.001930\n",
       "        16.0          0.002782\n",
       "        17.0          0.035452\n",
       "        18.0          0.015782\n",
       "        19.0          0.381567\n",
       "        20.0          0.005648\n",
       "        21.0          0.191053\n",
       "        22.0          0.098635\n",
       "        23.0          0.001221\n",
       "        24.0          0.000341\n",
       "        25.0          0.013823\n",
       "2.0     0.0           0.002480\n",
       "        1.0           0.002052\n",
       "        2.0           0.015749\n",
       "        3.0           0.032866\n",
       "        4.0           0.051831\n",
       "        5.0           0.003232\n",
       "        6.0           0.001761\n",
       "        7.0           0.000222\n",
       "        8.0           0.017425\n",
       "        9.0           0.001471\n",
       "        10.0          0.000547\n",
       "        11.0          0.159904\n",
       "        12.0          0.000171\n",
       "        13.0          0.000479\n",
       "        14.0          0.000205\n",
       "        15.0          0.000137\n",
       "        16.0          0.000154\n",
       "        17.0          0.070538\n",
       "        18.0          0.014997\n",
       "        19.0          0.429402\n",
       "        20.0          0.000359\n",
       "        21.0          0.038715\n",
       "        22.0          0.143009\n",
       "        23.0          0.002651\n",
       "        24.0          0.000547\n",
       "        25.0          0.009097\n",
       "Name: occupation, dtype: float64"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_feat.groupby('gender')['occupation'].value_counts(normalize=True).sort_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "b2861258",
   "metadata": {},
   "outputs": [],
   "source": [
    "def user_feat_entity_cnt2json(x):\n",
    "    try:\n",
    "        x = x.split(',')\n",
    "        return {int(xx.split(':')[0]):float(xx.split(':')[1]) for xx in x}\n",
    "    except:\n",
    "        return {}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "73224585",
   "metadata": {},
   "outputs": [],
   "source": [
    "user_feat['entity_cnt'] = user_feat['entity_cnt'].apply(user_feat_entity_cnt2json)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "176d7666",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0         {228: 0.0, 1230: 0.6931471805599453, 2369: 0.0...\n",
       "1         {231: 1.0986122886681098, 1075: 1.609437912434...\n",
       "2         {47: 0.6931471805599453, 63: 0.0, 134: 0.0, 57...\n",
       "3         {63: 0.0, 165: 0.0, 228: 0.6931471805599453, 6...\n",
       "4         {113: 0.0, 191: 0.6931471805599453, 245: 0.0, ...\n",
       "                                ...                        \n",
       "180606    {768: 0.0, 1230: 0.0, 1567: 0.6931471805599453...\n",
       "180607    {194: 1.3862943611198906, 1899: 0.0, 2259: 0.0...\n",
       "180608    {10: 0.0, 388: 1.6094379124341003, 907: 1.3862...\n",
       "180609    {2172: 0.0, 968: 0.0, 2124: 1.3862943611198906...\n",
       "180610    {228: 0.6931471805599453, 2369: 0.0, 2298: 3.1...\n",
       "Name: entity_cnt, Length: 180611, dtype: object"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_feat['entity_cnt']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "9c8db19e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    942230\n",
       "1    100985\n",
       "Name: label, dtype: int64"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['label'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "id": "05afd506",
   "metadata": {},
   "outputs": [],
   "source": [
    "train = train.sort_values(by=['user_id', 'log_time'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "05e689f1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(180611, 162706, 47911)"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_feat['user_id'].nunique(), train['user_id'].nunique(), test['user_id'].nunique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "id": "7320490e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "47911"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test['user_id'].nunique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "81b518fe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1933"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 不在训练集出现的，测试集用户\n",
    "len(set(test['user_id'].unique()) - set(train['user_id'].unique()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "abd1e831",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45978"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 在训练集出现的，测试集用户\n",
    "len(set(test['user_id'].unique()) & set(train['user_id'].unique()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "id": "e763b78c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3.438166600571894, 1)"
      ]
     },
     "execution_count": 208,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 测试集平均每个用户拥有item_id\n",
    "test.groupby('user_id')['item_id'].nunique().mean(), test.groupby('user_id')['item_id'].nunique().min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "id": "d7b1fb8c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "21950"
      ]
     },
     "execution_count": 233,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum(test.groupby('user_id')['item_id'].nunique() == 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "ad80d18a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5.538738583703121"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 训练集平均每个用户拥有item_id\n",
    "train.groupby('user_id')['item_id'].nunique().mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "id": "cea1989c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "58"
      ]
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(set(test['item_id'].unique()) - set(train['item_id'].unique()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "894ed7e8",
   "metadata": {},
   "outputs": [],
   "source": [
    "train = pd.merge(train, user_feat, how='left')\n",
    "train = pd.merge(train, item_feat, how='left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "id": "c4bfb19b",
   "metadata": {},
   "outputs": [],
   "source": [
    "test = pd.merge(test, user_feat, how='left')\n",
    "test = pd.merge(test, item_feat, how='left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "47a0ea24",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>log_time</th>\n",
       "      <th>label</th>\n",
       "      <th>dt</th>\n",
       "      <th>gender</th>\n",
       "      <th>age</th>\n",
       "      <th>occupation</th>\n",
       "      <th>entity_cnt</th>\n",
       "      <th>category_l1_name</th>\n",
       "      <th>category_l2_name</th>\n",
       "      <th>category_l3_name</th>\n",
       "      <th>voucher_benefit_floor_amount</th>\n",
       "      <th>voucher_benefit_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>173397</td>\n",
       "      <td>0</td>\n",
       "      <td>543</td>\n",
       "      <td>173025</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>{165: 0.6931471805599453, 170: 3.4965075614664...</td>\n",
       "      <td>8.0</td>\n",
       "      <td>29.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>429729</td>\n",
       "      <td>0</td>\n",
       "      <td>385</td>\n",
       "      <td>428164</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>{165: 0.6931471805599453, 170: 3.4965075614664...</td>\n",
       "      <td>5.0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>128.0</td>\n",
       "      <td>19000.0</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       id  user_id  item_id  log_time  label  dt  gender  age  occupation  \\\n",
       "0  173397        0      543    173025      0   1     1.0  4.0        22.0   \n",
       "1  429729        0      385    428164      0   2     1.0  4.0        22.0   \n",
       "\n",
       "                                          entity_cnt  category_l1_name  \\\n",
       "0  {165: 0.6931471805599453, 170: 3.4965075614664...               8.0   \n",
       "1  {165: 0.6931471805599453, 170: 3.4965075614664...               5.0   \n",
       "\n",
       "   category_l2_name  category_l3_name  voucher_benefit_floor_amount  \\\n",
       "0              29.0              45.0                          10.0   \n",
       "1              38.0             128.0                       19000.0   \n",
       "\n",
       "   voucher_benefit_amount  \n",
       "0                  2000.0  \n",
       "1                   500.0  "
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "id": "9f29943a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>gender</th>\n",
       "      <th>age</th>\n",
       "      <th>occupation</th>\n",
       "      <th>entity_cnt</th>\n",
       "      <th>category_l1_name</th>\n",
       "      <th>category_l2_name</th>\n",
       "      <th>category_l3_name</th>\n",
       "      <th>voucher_benefit_floor_amount</th>\n",
       "      <th>voucher_benefit_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>24731</td>\n",
       "      <td>1099</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>{81: 0.0, 282: 1.3862943611198906, 287: 1.3862...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>53.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>160029</td>\n",
       "      <td>1443</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>17.0</td>\n",
       "      <td>{131: 0.6931471805599453, 300: 0.0, 674: 0.0, ...</td>\n",
       "      <td>8.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>500.0</td>\n",
       "      <td>380.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id  user_id  item_id  gender  age  occupation  \\\n",
       "0   0    24731     1099     2.0  2.0         NaN   \n",
       "1   1   160029     1443     2.0  2.0        17.0   \n",
       "\n",
       "                                          entity_cnt  category_l1_name  \\\n",
       "0  {81: 0.0, 282: 1.3862943611198906, 287: 1.3862...               0.0   \n",
       "1  {131: 0.6931471805599453, 300: 0.0, 674: 0.0, ...               8.0   \n",
       "\n",
       "   category_l2_name  category_l3_name  voucher_benefit_floor_amount  \\\n",
       "0              16.0              53.0                          10.0   \n",
       "1              50.0               6.0                         500.0   \n",
       "\n",
       "   voucher_benefit_amount  \n",
       "0                     0.0  \n",
       "1                   380.0  "
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "id": "7cfc0e29",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>log_time</th>\n",
       "      <th>label</th>\n",
       "      <th>dt</th>\n",
       "      <th>gender</th>\n",
       "      <th>age</th>\n",
       "      <th>occupation</th>\n",
       "      <th>category_l1_name</th>\n",
       "      <th>category_l2_name</th>\n",
       "      <th>category_l3_name</th>\n",
       "      <th>voucher_benefit_floor_amount</th>\n",
       "      <th>voucher_benefit_amount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.005055</td>\n",
       "      <td>0.048528</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.002724</td>\n",
       "      <td>0.979626</td>\n",
       "      <td>-0.009439</td>\n",
       "      <td>-0.004917</td>\n",
       "      <td>-0.009023</td>\n",
       "      <td>-0.006095</td>\n",
       "      <td>-0.009209</td>\n",
       "      <td>-0.007666</td>\n",
       "      <td>-0.013394</td>\n",
       "      <td>0.013376</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>user_id</th>\n",
       "      <td>-0.005055</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.001529</td>\n",
       "      <td>-0.005057</td>\n",
       "      <td>-0.004463</td>\n",
       "      <td>-0.005734</td>\n",
       "      <td>0.023430</td>\n",
       "      <td>-0.000029</td>\n",
       "      <td>0.012495</td>\n",
       "      <td>0.001272</td>\n",
       "      <td>0.002149</td>\n",
       "      <td>-0.002462</td>\n",
       "      <td>0.000594</td>\n",
       "      <td>-0.005593</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>item_id</th>\n",
       "      <td>0.048528</td>\n",
       "      <td>-0.001529</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.048525</td>\n",
       "      <td>-0.038559</td>\n",
       "      <td>0.044557</td>\n",
       "      <td>0.047024</td>\n",
       "      <td>-0.017821</td>\n",
       "      <td>-0.005821</td>\n",
       "      <td>0.150367</td>\n",
       "      <td>-0.020196</td>\n",
       "      <td>0.061440</td>\n",
       "      <td>-0.072113</td>\n",
       "      <td>0.117924</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>log_time</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.005057</td>\n",
       "      <td>0.048525</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.002722</td>\n",
       "      <td>0.979686</td>\n",
       "      <td>-0.009444</td>\n",
       "      <td>-0.004906</td>\n",
       "      <td>-0.009021</td>\n",
       "      <td>-0.006110</td>\n",
       "      <td>-0.009219</td>\n",
       "      <td>-0.007664</td>\n",
       "      <td>-0.013393</td>\n",
       "      <td>0.013380</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>label</th>\n",
       "      <td>0.002724</td>\n",
       "      <td>-0.004463</td>\n",
       "      <td>-0.038559</td>\n",
       "      <td>0.002722</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000533</td>\n",
       "      <td>0.015357</td>\n",
       "      <td>-0.005680</td>\n",
       "      <td>-0.009069</td>\n",
       "      <td>-0.022109</td>\n",
       "      <td>-0.002377</td>\n",
       "      <td>0.000380</td>\n",
       "      <td>0.004613</td>\n",
       "      <td>-0.037776</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>dt</th>\n",
       "      <td>0.979626</td>\n",
       "      <td>-0.005734</td>\n",
       "      <td>0.044557</td>\n",
       "      <td>0.979686</td>\n",
       "      <td>0.000533</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.010862</td>\n",
       "      <td>0.005448</td>\n",
       "      <td>-0.005778</td>\n",
       "      <td>-0.013691</td>\n",
       "      <td>-0.007694</td>\n",
       "      <td>-0.010731</td>\n",
       "      <td>-0.012092</td>\n",
       "      <td>0.015757</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>gender</th>\n",
       "      <td>-0.009439</td>\n",
       "      <td>0.023430</td>\n",
       "      <td>0.047024</td>\n",
       "      <td>-0.009444</td>\n",
       "      <td>0.015357</td>\n",
       "      <td>-0.010862</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.064898</td>\n",
       "      <td>-0.058379</td>\n",
       "      <td>0.165949</td>\n",
       "      <td>-0.035876</td>\n",
       "      <td>-0.009753</td>\n",
       "      <td>-0.048805</td>\n",
       "      <td>0.038586</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>age</th>\n",
       "      <td>-0.004917</td>\n",
       "      <td>-0.000029</td>\n",
       "      <td>-0.017821</td>\n",
       "      <td>-0.004906</td>\n",
       "      <td>-0.005680</td>\n",
       "      <td>0.005448</td>\n",
       "      <td>-0.064898</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.364688</td>\n",
       "      <td>-0.009778</td>\n",
       "      <td>0.036512</td>\n",
       "      <td>0.045674</td>\n",
       "      <td>0.063366</td>\n",
       "      <td>-0.052035</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>occupation</th>\n",
       "      <td>-0.009023</td>\n",
       "      <td>0.012495</td>\n",
       "      <td>-0.005821</td>\n",
       "      <td>-0.009021</td>\n",
       "      <td>-0.009069</td>\n",
       "      <td>-0.005778</td>\n",
       "      <td>-0.058379</td>\n",
       "      <td>0.364688</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.008612</td>\n",
       "      <td>0.010074</td>\n",
       "      <td>0.010206</td>\n",
       "      <td>0.021806</td>\n",
       "      <td>-0.022032</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>category_l1_name</th>\n",
       "      <td>-0.006095</td>\n",
       "      <td>0.001272</td>\n",
       "      <td>0.150367</td>\n",
       "      <td>-0.006110</td>\n",
       "      <td>-0.022109</td>\n",
       "      <td>-0.013691</td>\n",
       "      <td>0.165949</td>\n",
       "      <td>-0.009778</td>\n",
       "      <td>-0.008612</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.034236</td>\n",
       "      <td>0.245016</td>\n",
       "      <td>-0.121978</td>\n",
       "      <td>0.158479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>category_l2_name</th>\n",
       "      <td>-0.009209</td>\n",
       "      <td>0.002149</td>\n",
       "      <td>-0.020196</td>\n",
       "      <td>-0.009219</td>\n",
       "      <td>-0.002377</td>\n",
       "      <td>-0.007694</td>\n",
       "      <td>-0.035876</td>\n",
       "      <td>0.036512</td>\n",
       "      <td>0.010074</td>\n",
       "      <td>0.034236</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.140079</td>\n",
       "      <td>0.204908</td>\n",
       "      <td>0.077896</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>category_l3_name</th>\n",
       "      <td>-0.007666</td>\n",
       "      <td>-0.002462</td>\n",
       "      <td>0.061440</td>\n",
       "      <td>-0.007664</td>\n",
       "      <td>0.000380</td>\n",
       "      <td>-0.010731</td>\n",
       "      <td>-0.009753</td>\n",
       "      <td>0.045674</td>\n",
       "      <td>0.010206</td>\n",
       "      <td>0.245016</td>\n",
       "      <td>0.140079</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.166174</td>\n",
       "      <td>-0.073063</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>voucher_benefit_floor_amount</th>\n",
       "      <td>-0.013394</td>\n",
       "      <td>0.000594</td>\n",
       "      <td>-0.072113</td>\n",
       "      <td>-0.013393</td>\n",
       "      <td>0.004613</td>\n",
       "      <td>-0.012092</td>\n",
       "      <td>-0.048805</td>\n",
       "      <td>0.063366</td>\n",
       "      <td>0.021806</td>\n",
       "      <td>-0.121978</td>\n",
       "      <td>0.204908</td>\n",
       "      <td>0.166174</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.022064</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>voucher_benefit_amount</th>\n",
       "      <td>0.013376</td>\n",
       "      <td>-0.005593</td>\n",
       "      <td>0.117924</td>\n",
       "      <td>0.013380</td>\n",
       "      <td>-0.037776</td>\n",
       "      <td>0.015757</td>\n",
       "      <td>0.038586</td>\n",
       "      <td>-0.052035</td>\n",
       "      <td>-0.022032</td>\n",
       "      <td>0.158479</td>\n",
       "      <td>0.077896</td>\n",
       "      <td>-0.073063</td>\n",
       "      <td>0.022064</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                    id   user_id   item_id  log_time  \\\n",
       "id                            1.000000 -0.005055  0.048528  1.000000   \n",
       "user_id                      -0.005055  1.000000 -0.001529 -0.005057   \n",
       "item_id                       0.048528 -0.001529  1.000000  0.048525   \n",
       "log_time                      1.000000 -0.005057  0.048525  1.000000   \n",
       "label                         0.002724 -0.004463 -0.038559  0.002722   \n",
       "dt                            0.979626 -0.005734  0.044557  0.979686   \n",
       "gender                       -0.009439  0.023430  0.047024 -0.009444   \n",
       "age                          -0.004917 -0.000029 -0.017821 -0.004906   \n",
       "occupation                   -0.009023  0.012495 -0.005821 -0.009021   \n",
       "category_l1_name             -0.006095  0.001272  0.150367 -0.006110   \n",
       "category_l2_name             -0.009209  0.002149 -0.020196 -0.009219   \n",
       "category_l3_name             -0.007666 -0.002462  0.061440 -0.007664   \n",
       "voucher_benefit_floor_amount -0.013394  0.000594 -0.072113 -0.013393   \n",
       "voucher_benefit_amount        0.013376 -0.005593  0.117924  0.013380   \n",
       "\n",
       "                                 label        dt    gender       age  \\\n",
       "id                            0.002724  0.979626 -0.009439 -0.004917   \n",
       "user_id                      -0.004463 -0.005734  0.023430 -0.000029   \n",
       "item_id                      -0.038559  0.044557  0.047024 -0.017821   \n",
       "log_time                      0.002722  0.979686 -0.009444 -0.004906   \n",
       "label                         1.000000  0.000533  0.015357 -0.005680   \n",
       "dt                            0.000533  1.000000 -0.010862  0.005448   \n",
       "gender                        0.015357 -0.010862  1.000000 -0.064898   \n",
       "age                          -0.005680  0.005448 -0.064898  1.000000   \n",
       "occupation                   -0.009069 -0.005778 -0.058379  0.364688   \n",
       "category_l1_name             -0.022109 -0.013691  0.165949 -0.009778   \n",
       "category_l2_name             -0.002377 -0.007694 -0.035876  0.036512   \n",
       "category_l3_name              0.000380 -0.010731 -0.009753  0.045674   \n",
       "voucher_benefit_floor_amount  0.004613 -0.012092 -0.048805  0.063366   \n",
       "voucher_benefit_amount       -0.037776  0.015757  0.038586 -0.052035   \n",
       "\n",
       "                              occupation  category_l1_name  category_l2_name  \\\n",
       "id                             -0.009023         -0.006095         -0.009209   \n",
       "user_id                         0.012495          0.001272          0.002149   \n",
       "item_id                        -0.005821          0.150367         -0.020196   \n",
       "log_time                       -0.009021         -0.006110         -0.009219   \n",
       "label                          -0.009069         -0.022109         -0.002377   \n",
       "dt                             -0.005778         -0.013691         -0.007694   \n",
       "gender                         -0.058379          0.165949         -0.035876   \n",
       "age                             0.364688         -0.009778          0.036512   \n",
       "occupation                      1.000000         -0.008612          0.010074   \n",
       "category_l1_name               -0.008612          1.000000          0.034236   \n",
       "category_l2_name                0.010074          0.034236          1.000000   \n",
       "category_l3_name                0.010206          0.245016          0.140079   \n",
       "voucher_benefit_floor_amount    0.021806         -0.121978          0.204908   \n",
       "voucher_benefit_amount         -0.022032          0.158479          0.077896   \n",
       "\n",
       "                              category_l3_name  voucher_benefit_floor_amount  \\\n",
       "id                                   -0.007666                     -0.013394   \n",
       "user_id                              -0.002462                      0.000594   \n",
       "item_id                               0.061440                     -0.072113   \n",
       "log_time                             -0.007664                     -0.013393   \n",
       "label                                 0.000380                      0.004613   \n",
       "dt                                   -0.010731                     -0.012092   \n",
       "gender                               -0.009753                     -0.048805   \n",
       "age                                   0.045674                      0.063366   \n",
       "occupation                            0.010206                      0.021806   \n",
       "category_l1_name                      0.245016                     -0.121978   \n",
       "category_l2_name                      0.140079                      0.204908   \n",
       "category_l3_name                      1.000000                      0.166174   \n",
       "voucher_benefit_floor_amount          0.166174                      1.000000   \n",
       "voucher_benefit_amount               -0.073063                      0.022064   \n",
       "\n",
       "                              voucher_benefit_amount  \n",
       "id                                          0.013376  \n",
       "user_id                                    -0.005593  \n",
       "item_id                                     0.117924  \n",
       "log_time                                    0.013380  \n",
       "label                                      -0.037776  \n",
       "dt                                          0.015757  \n",
       "gender                                      0.038586  \n",
       "age                                        -0.052035  \n",
       "occupation                                 -0.022032  \n",
       "category_l1_name                            0.158479  \n",
       "category_l2_name                            0.077896  \n",
       "category_l3_name                           -0.073063  \n",
       "voucher_benefit_floor_amount                0.022064  \n",
       "voucher_benefit_amount                      1.000000  "
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.corr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "id": "e3a50e65",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "category_l3_name                0.000380\n",
       "dt                              0.000533\n",
       "category_l2_name                0.002377\n",
       "log_time                        0.002722\n",
       "id                              0.002724\n",
       "user_id                         0.004463\n",
       "voucher_benefit_floor_amount    0.004613\n",
       "age                             0.005680\n",
       "occupation                      0.009069\n",
       "gender                          0.015357\n",
       "category_l1_name                0.022109\n",
       "voucher_benefit_amount          0.037776\n",
       "item_id                         0.038559\n",
       "label                           1.000000\n",
       "Name: label, dtype: float64"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.corr().loc['label'].abs().sort_values()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "id": "6df7cfdc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD4CAYAAAAEhuazAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAydElEQVR4nO3de3Bk133Y+e+v32g8Bg1gMEPOCwAfGpEiJZLgzDDhjlmyVKEsmXRqtQnldZW8sYpMIpXkVXZjpWzRFSZbKyop21LCOGQcVaw8RCncZD1rU1YsUxM6tubJh8gRh5oh5oV5EBg0Hg3089579o97u6e78WoMGui+3b/PFAqNey8a52KAXx+c3zm/I8YYlFJKtZdAoxuglFJq82nwV0qpNqTBXyml2pAGf6WUakMa/JVSqg2FGvWFBwYGzNDQUKO+vFJK+dLJkyevG2O2rvd5Ghb8h4aGOHHiRKO+vFJK+ZKIXKjH8+iwj1JKtSEN/kop1YY0+CulVBvS4K+UUm1Ig79SSrWhhs32uRmHT0/w/KtjXJpOsysR56mDIzyyd7DRzVJKKd/xTc//8OkJnj50iolUlt6OMBOpLE8fOsXh0xONbppSSvmOb4L/86+OEQ4K8UgIEfd9OCg8/+pYo5umlFK+45vgf2k6TUc4WHGsIxxkfDrdoBYppZR/+Sb470rEyRTsimOZgs3ORLxBLVJKKf/yTfB/6uAIBduQzlsY474v2IanDo40umlKKeU7NQV/EXlURN4VkbMi8pUVrvufRcSIyGj9muh6ZO8gzzx2N4PdMWYzBQa7Yzzz2N0620cppW7CqlM9RSQIPAd8HBgHjovIIWPMT6uu6wa+BBzdiIaC+wKgwV4ppdavlp7/PuCsMWbMGJMHXgQeX+K6fwI8C2Tr2D6llFIboJbgvwO4VPbxuHesRETuB3YZY/5kpScSkSdF5ISInJicnFxzY5VSStXHuhO+IhIAfgf4B6tda4x5wRgzaowZ3bp13XsRKKWUukm1BP/LwK6yj3d6x4q6gQ8Bh0XkPHAAOLQRSV+llFL1UUvwPw7cISLDIhIBngAOFU8aY2aNMQPGmCFjzBBwBHjMGKPbdCmlVJNaNfgbYyzgC8APgHeA7xljTonIMyLy2EY3UCmlVP3VVNXTGPMy8HLVsaeXufaR9TdLKaXURvLNCl+llFL1o8FfKaXakAZ/pZRqQxr8lVKqDWnwV0qpNqTBXyml2pAGf6WUakMa/JVSqg1p8FdKqTakwV8ppdqQBn+llGpDGvyVUqoNafBXSqk2pMFfKaXakAZ/pZRqQxr8lVKqDWnwV0qpNqTBXyml2pAGf6WUakMa/JVSqg1p8FdKqTakwV8ppdqQBn+llGpDGvyVUqoNafBXSqk2pMFfKaXakAZ/pZRqQxr8lVKqDWnwV0qpNqTBXyml2pAGf6WUakMa/JVSqg1p8FdKqTakwV8ppdqQBn+llGpDoUY3oB4On57g+VfHuDSdZlcizlMHR3hk72Cjm6WUUk3L9z3/w6cnePrQKSZSWXo7wkyksjx96BSHT080umlKKVXBGEPechrdDKAFgv/zr44RDgrxSAgR9304KDz/6lijm6aUUgBYtsP0Qp5LyQwz6XyjmwO0wLDPpek0vR3himMd4SDj0+kGtUgppVzpvEUqa7GQs8qONkefu6ZWiMijIvKuiJwVka8scf7vishbIvKGiPwPEbmr/k1d2q5EnEzBrjiWKdjsTMQ3qwlKKVViO4bZdIFLyTTXZrNVgb95rBr8RSQIPAd8ArgL+MwSwf0/GWPuMcZ8BPg68Dv1buhynjo4QsE2pPMWxrjvC7bhqYMjm9UEpZQiW7CZSGW5mEwztZCjYDfH2P5yahn22QecNcaMAYjIi8DjwE+LFxhj5squ7wRMPRtZtNysnmdwx/7Hp9Ps1Nk+SqlN4jiG+bzFXKbQNIncWtUS/HcAl8o+Hgf2V18kIp8HvgxEgI8u9UQi8iTwJMDu3bvX1NDirJ5wUCpm9TwDPLJ3UIO9UmrT5CybVNZiPmvhmA3p6264umUejDHPGWNuA34D+K1lrnnBGDNqjBndunXrmp5fZ/UopRrJGMN8zuLKTIbL0xnmMgXfBn6ored/GdhV9vFO79hyXgR+fz2NWorO6lFKNULBdkhlLVLZArbj32BfrZae/3HgDhEZFpEI8ARwqPwCEbmj7MNPAmfq10SXzupRSm2mdN7i2myWS8k0M+l8SwV+qCH4G2Ms4AvAD4B3gO8ZY06JyDMi8ph32RdE5JSIvIE77v/ZejdUZ/UopTaa7Rhm0vnSNM10vjmnadaDmAaNWY2OjpoTJ06s6XOKs310Vo9Sqp6yBZu5TIGFvM1Gx8SuaIjBnthNf76InDTGjK63Hb5a4auzepRS9eI4hlTOnabZ7HPyN4Kvgr9SSq1XzrKZy7glF/w8W2e9NPgrpVpecZrmXNYiVzVxpF1p8FdKtay85ZDKFpjPWS03W2e9fBX8ddMWpdRq3NmANnPZApm89vKX45vgv1p5h5U+T18wlGp9VmkxloXltF8Cd62ao7B0DW6mvIPu8qVU68vkbd6fy3JpOsN0Oq+Bv0a+Cf6XptN0hIMVx1Yr76D1gJRqTeU186/OZljIWRs+P7/V+GbYZ1cizkQqSzxyo8mrlXfQekBKtZZswR3LX8ht/GKsVuebnv/NlHfQekBK+Z/jGOayBcan01yZyTCf1V5+Pfgm+D+yd5BP37+DyVSOd66lmEzl+PT9O1ZM3mo9IKX8K285XJ/PcTGZ5noq57vNUpqdb4Z9Dp+e4KXXLrO1O8rucJBMweal1y5z787eZV8AdJcvpfzFGMNC3q2zk9XFWBvKN8G/PHkLEI+ESOctnn91bMVgrvWAlGp+rVozv5n5Jvhr8lap1pPOW8xlrJYundysfBP8b2a2j1Kq+diOIZUtkMpabVlNs1n4JuGryVul/C1bsJmYy3IxmSa5kNfA32C+6fnXmrzVcg5KNY92r5nfzHwT/GH15O3N1v9RStWX1sxvfr4Z9qmFlnNQqnGMccfyL89kuDydIZUtaOBvYr7q+a9GZwQptfm0Zr4/tVTw1xlBSm0OrZnvfy017KMzgpTaWJbtML2Q51Iyw/tzWQ38a+QYwztX5/jJ+Eyjm9JaPX8t56DUxsh4vfx0XqtprlU6b3HiwjRHx5IcPZckuZDno3sH+davPtjQdrVU8Act56BUvdiOYT5rMZfVaZprNT6d5shYkqNjU7w5PotVlQu5MpPBcQyBgDSohS0Y/JVS66M189euYDu8NT7LkXNTHBlLMj6dqTgfDAj37tzCgeE+Prp3kNGhPkQaF/hBg79SihuLsVLZgpZOrlFyIc/Rc27v/sSFadJV+Y9EPMz+4X4OjPTxwJ4EnVE33HZFQw0P/KDBv2a6cli1Iu3l184xhp+9n/KGc5K8+35q0TUf2NbNgZE+Doz0c8e2LgJNEOSXo8G/BrpyWLUS7eXXbiFncfLCtBvwz00xnS5UnI9HgozuSbB/pJ/9w330dUYa1NK181Xwb1Tv+2b3ElCqmWQLNqmsllxYiTGGS9MZjo5NceRckreWSNbuTHSwf7iPh0b6uWfnFsJBf86Y903wb2TvW1cOK79yHMN83i2spr38peUth5+Mz3DknDucc3mmMlkbCggf3rmF/SPu+H2rLBr1TfBvZO9bVw4rv9HCaiubms9x9FySI2NJTlxIki1UvjD2dUbYP9zH/pE+RvckKn73W4Vv7qiRve+nDo7w9KFTpPMWHd7+wbpyWDUbY4pj+RY53f+2gmMM715LcXQsyY/HpjgzMV9xXoAPbL+RrL19sLmTtfXgm+C/KxHnnauzzGUtHAMBgZ5YiA/esmXDv7auHFbNLGe5Y/nzWe3ll5vPWZw4P83Rc1McO5dclKztjAR5YCjBQyP9PDjkr2RtPfgm+G/vifDjsRv7fDoGZjIW23s25z9MVw6rZmKMYT5nMae9/BJjDBeT6dLMnLcuzy2qMrq7L87+4T4OjPRxz44thHyarK0H3wT/Pz89STAAxrhvIu7bn5+ebHTTlNo0ecthLlvQXr4nbzm8OT7DkbEkR8amuDqbrTgfDgr37uzloZE+9o/0s6O3o0EtbT6+Cf4LeZtQQAjIjVdqxzgsaFVB1eKKvfxU1iKrvXwmUzmOemUUXrswTbZqFlN/l5usPTDczwN7EnREgg1qaXPzTfDvjLiJ1vI6SI5xjyvVinSTFJftuMnaH49NcXQsydnJxcnavbd0c2CknwPDfdw+2NUU5ROanW+C/+ceHuYbr5zFchwC4gZ+x7jHlWoVxhgW8jZzmUJb9/LnsxbHzyc5ci7JsXNJZjNVydpokAf3uGP3+4b76I23V7K2HnwT/L/4sTsB+IP/cY6FvE1nJMjnHh4uHW9GWg9I1apgO8xl2reXb4zhQvJGGeS3Ls9S/W3Y0x/nwLA7FfPuW3vaOllbDzUFfxF5FPgGEAT+wBjztarzXwY+B1jAJPB3jDEX6txWvvixO7l3Z28poP54LMm9pyeaMqBqPSC1mmIvP9WmWyHmLYfXL02XCqVdm1ucrL1vV29pZe0tWzRZW0+rBn8RCQLPAR8HxoHjInLIGPPTssteB0aNMWkR+XvA14G/Xe/G+imgaj0gtZyC7ZDKuoXV2q2XP5nKcWTMS9ZenCZXlawd6Irw0Eg/+0f6uG93go6w5vQ2Si09/33AWWPMGICIvAg8DpSCvzHmR2XXHwF+pZ6NLPJTQNV6QKpcu254bjvunrVHvEJpY5MLFecF+OAtPaWVtbdt7dRk7SapJfjvAC6VfTwO7F/h+l8Dvr/UCRF5EngSYPfu3TU28QY/BVStB6TgRi9/PmthOe1RWG0uU+B42crauaxVcb4rGuLBoQQHRvrZN9THlnh4mWdSG6muCV8R+RVgFPi5pc4bY14AXgAYHR1d89+7fgqoWg+ovS148/LTeWv1i33OGMP5qXRpOOfUlcXJ2qH+uDsVc6SPu2/dQrCBe9cqVy3B/zKwq+zjnd6xCiLyMeA3gZ8zxuTq07xKfgqofqgHpLOR6ssqjeW3fi8/V7B5/dIMR8eSHDk3xftzlb/ykVCA+3b1csBbWbu9J9agljaPYECIhoLEo80xyVJW27pNRELAz4Cfxw36x4FfNsacKrvmPuAl4FFjzJlavvDo6Kg5ceLEmhtcDFjNElD9GkDLk+flL6TPPHa3L9rfTNJ5i7lM6/fy35/LlurmvH5xZlGydrA7yv4Rd5OTj+zqJdbmydpIKEA0FCQWdt9HQvWZmioiJ40xo+t9nlVfgowxloh8AfgB7lTPbxljTonIM8AJY8wh4J8BXcB/9pI1F40xj623cUtppgJrfpp9VM1PyfNm1A69fNsx/PTKnLuy9lySc9crk7UBgbtv7SltUj480L7J2mKvPhoKEAu77wNNPrRV098fxpiXgZerjj1d9vhjdW6XL/g5gPoped5M0nmrtBViK5rNFNyVtWNJjp9PkqpK1vbEQjw45K6sHR3qY0tHeyZrw0EvyIcDxOrYq99MzTH4VKNmG2LxcwD1U/K80SzbKRVWK9it1cs3xjB2faG0yck7V+cWJWtHBjrZP+IWSrvr1p62S9YGREpBvvi+2Xv1tfBN8G/GIRY/B1A/Jc8bJePNy0/nbVbLjflJtmDz+sUZjpyb4sh7SSbnK5O10VCA+3b3cmCkn/3DfWxrs2RtK/Tqa+Gb4P/8q2MUbJupeYu87RAJBujpCDV0iMXPAdQPs5EawXYMqWyh5Xr512azpYVWb1yaWbSZ+7aeKAeGvZW1u3qJtkmytrpXHw0F2+YvG98E/zMTKWbTBQIBIRgQLMdwPZWnYKca1qaNDqAbPczVTMnzRst4NXYWWqSXbzuGt6/MulMxx6Y4P1U5FBkQ+NCOLRwYdqdiDvXH2yJZGw4G3GDvJWWjofZ4kVuKb4J/3nJAKG2qLAKOmEU9mM22UQG0GYe5qjVbDmatbMcwn7WYyxZaopc/my5w7Lwb7I+fn2Y+tzhZu8+rivngUILuWGsna4u9+vLplu3Sq6+Fb4J/OChkCuA4BhF3K0eASFB8H4SW0uwzifzw4rScbMGtl+/3Xr4xhvcmF0ora9+5Okf13Yxs7eQhb2Xt3u2tnazVXv3a+Cb437mth3PX50llb4z5d8fCJOIR3wahlTT7TKJmf3Gq1iq9/EzB5rUL06XFVtfn8xXnY6EA9+1OuCtrh/sYbNFkrfbq1883wf+pgyP86r87Xvq4YNss5G0Klk1vZ9Q3QahWzT6TqNlfnIqyBXfGzkLOv738KzOZUrB/49IMBbvyPm7ZEnP3rPVW1rbi7JRir7482Kv18U3w/wffe33J41Npi9mMxY5EnB4vGJUHIb8OCTX7TKJmfnFyHEMqZzGX8Wcv37Id3r7ilkE+OpbkQnJxsvaeHVvYP9LPQyN97O5rrWStiFSslI2FtVe/EXwT/KfSy6+otAxcmc0A0NMRLgUhP49LN/tUzGZ8cfJzL38mnefYOW9l7YUkC7nKmv+9HWEvWdvH6J4+umK++dVdVTgYcMfoS2P1gZZ6MWtWrfMTBFyfzxEKSikI+W1culozT8VslhenYi8/lS00fObXWhhjODMxX6qKefpqalGy9vbBLneTk+F+PrC9uyV6v8VefXnPXvfibYyWCP4BgXBAyFoOg92xUhD6rT962xfj0n7VyBenbMEu1dhxmqCXf2wsyYvHL3F1LsMtPR088eAu9o30VVyTyducvDDtDuecSzK1UJWsDQd4YE+CA8P97BvuY2t3dDNvYUNor755+Sb4d0UCzOeX7tk5xn27c7CL7zx5oHS8mcel1do5jmE+747lN1Mv/9hYkm+8coZQQOiJhZhayPGNV87wJe5gR6LDLaMwluQn40sna4ubnHx4p7+Ttdqr9xffBP97dib48djUkuciQXfF7+R8jsOnJ0q90WYcl1Zrl7Ns5jLN08uv9uLxS4QC7r4IxhiMMaSyFr/9/51aVPM+GBDu2bGlNJyzq6/Dtz3hUCBQmnnjzsTRXr2f+Cb4v3V5etlzxhiCIkyn83zxxdf55hP3lYYk6jEu7dcZQ35mTHEs3yJXaO4Nz8dn0gQFptN50nl7UVXMRDxcWln7wJ4EXU2yk9NaiAiRUICYN4QT01697/nmpzBTWL7HZzkQCQkhgXTerpjRs95xaT/PGPKjnGWXNjxvxl4+gGMMZyfm+fF7bqG06oVW4K5I74tHePoX7+ID27tLZUn8Qnv1rc83wX+lqXsGd8Wf40A0JISDUrcZPX6fMeQHxhgW8m7JhWyT9vLTeYsTF6Y5Opbk6LkkyapkrYAXLAMs5Cxsx9AZCZLKWE0f+LVX3558E/y7oiHmskvP9Rdxk4EOhoGuWF1n9PhlJasfWbbDXNadpmlXj5U0gUvJNEfOJTk6NsVPxmexqtq4M9HB/mF3z9psweZbf3me81MLhILC9s4IBceUEr/VM38aKRQIVJUx1l59O/JN8P/cw8P8zg+X3hteDISCwkBXjJ6OMOm8VbcZPTpjqP6Km6Q021aIBdvhJ+OzpamY49OZivOhgHDvTndl7YHhPnb1Vf4MvHTyMjt6O+goq4WfKdi8ePxSw4J/sVdfPgMnrL16hY+C//eOX1z2XGc0yGCP2+O/Pp8luVBgJp3nMy8cWXdy1m8zhpo1Od2shdWm5nMc9VbWnrwwTaZq2CkRD5c2KH9gT4LOFZK1V+cy9FStvI2FA1ybyyzzGfUXDEhFWQTt1avl+Cb4j8/mlj1nGxjsjnFmIkUqa5GIhxnoitYlOdssK1lr0YzJ6eI0zfmc1RQlFxxjePdaqrSy9mfvzy+65gPbuzngzc65Y1tXzWP2t/R0MLWQq+j5ZwsO23s66tb+ciJufqs82GuvXtXKN8F/JdmCzXeePMBnXjhSMURTr+RsM5dZKNcsyWljDPM5i7kmmaa5kHOTtUfGpjh2Lsl0ulBxPh4JMronwX5vz9q+zsiav8axsSRz2QKXZzLuEGRnhGAggOUYnnhw1009X/WK4Ydu79devaqblgj+joGHn32FyVSO7T2VS+LrnZxttmGV8vZsxv2vpGA7zGUKzHuzXRrFGMOl6QxHvT1rfzI+u6g9OxMd7kKrkX7u2bFlXT3m8hW+23uiXJ/Pc20ux1BfnM8/cvuax/uLzxcOComOMLOZPM8dPsv2LTFfdEKUP/gm+IfErd65nFzBQoDLM1lASuWd65mcbbZhler2XE/lNvT+l5POW8xlLNL5xiVw85bDm+MzpeGcKzPZivPhoHDvzt7SytodifoNxZSv8IUgXVG3smxPR6TmwB8MSKlW/X95/TId4QCdUff/MBwK6vRiVXe+Cf5b4mGmFgrLnp+cLxAOuNs7vp/K0h0L1T052yzDKsu1Z/uWGOPTmQ27/3K2Y0hlC6SyVsMSuNfnc6Vgf/LCNNlCZTv6OiOlsfsH9iToiGzMBiA3k+iNhCo3Jimv6XNlNqPTi9WG803wL9iGYABWijMFB4ICtm2YzRTqnpxttjn/1e3pjoXZ0Wu4NpfbkPuHxtbMtx03WVsslHZ2ojJZK7jJ2odG+tk/0sftg7Una9djtURvQBbPwAmsUJ5ZpxerzeCb4B8JBcjkBXtR1fNKAe/P77/4jY+u+2tWj+93Rdypns3yS7lUkAgFA9y/O1FR3XS9GllNcz5rceKCOxXz2LkkM5nKv/46I0FGh9xNTvYN95GIrz1Zu15PPLiLb7xyhkzBJhYOkLMcHANPHhxmR6JjzVsO+m16sfIn3wT/Owa7ef3iNIVVEomOMaTzFg8/+8qKCdnVErdLje/PZQqll55m+KXc6CCRtxzmsoVNrbNjjOFiMs2RsSRHxqZ46/LsokJpu/vi7sra2/r50K09DS1FICIc/MBWOqNB/v2Ri1yZSbOrr3Ndf3H5aXqx8i9p1Nzr0dFRc+LEiZqv/+YPf7bsCt8i8d4i4QC3b+0iU3DrxfR3RpjP26UgD5QCe3nQfOaxu0u/YNXTRsFNbEaCAXrjkab5pSy+iNWrPcYY0t4K3Ex+c6ZpFpO1xYB/dXZxsvbDO3tLde9v7d2YefO10IJnqtFE5KQxZnS9z+Obnv+Px5Irng8GIAAYhG3dMUQE2zFMpwukcha3b+0qzc6JhwOrJm6XG9+fzRT4/q8f3JB7vBn1WoNg2Q6prFtC2XI2fmhnMpXjqDd2/9qFabJVw0n9XREOeCtr79+9ccnalWjBM9XKfBP8z0ykVjwfDwfI27C9J1qa5jiZyhEQN1EoIqUgf24qzR2DXRWfX524XSnp1mxz/ddjs6Zp2o7hnatzXimFKd6bXKg4L8AHb+lm/0g/D430c9vWzk3vUZe2HKzq1bfS/7dSRb4J/qsVAUt0xoiHAxU5gbztuMNAZb214oyM1RK3y42nPzTSV5ELOD81z1P/4SRd0SB3butZMTDUkmfYjCBT3cuvZf/Zm5HKFjh+/sbK2uqqrJ3RIA/u6ePAbf3sG0rQu4nJ2uKWg8XZN8ttOdhsazuUvzVTR8I3wb9679PF520kEqRgO6WAHRR3e8eBrhurXjMFm5GBThby9qqJ0s5IkLHrbg91uD/OVz95V8Xc+lS2wNR8AYMhW3BWDAyrBZGNDjLFsfxUtrKXv9L+s8u9ACz3YmGM4fxUmiNj7nDOqSuLk7V7+uOlufd3b2KyNhwMeL35G3Pra9FsazuUfzVbR8I3wX+1AYDrqTwF2/DPP/3hUgJ0eKCTyfkcoaBgjCkF+a9+ci+w/GyK8v+kOwbdxHHaW0BUnguYTOUQAeO4O4hdTKYJivDsn55e9J+5WhCpd5Ap9jAuJhe4ZUsHf2t0J6NDi4N55erUG7OYlitDXP1iMTmf5dkfnGbv9m7Gri/w/lxlAb5wULhvl5us3T/Sxy1bNj5ZGxBZFOiDK8yrX8lGre1oph6g2hzN1pHwTfAPhwIUVpp9Iu6skeoE6OHTEzz7p6c54y0IGu53h3ZWSpR+7fvvMJHKYjuGSDDAQFe0tDtYeS6gOKxUcAwi7hJ9xzH8bGK+YiN5WD2IrHR+rYHiR++8z1cPnSIobtGy9+ey/O4Pz/Cljy7uza91deqLxy8BhpxlSC64e9YaKhPyW7uiHBjpY/9IH/ftTlQsftoIN9urr8VGLLhqth6g2hzNtkjUN8E/XcO0Q2MMn3nhSEWQBFjI2+xMdJR6tSv9oh0+PcGZyXmCIu6wkW24Mpvh1i0xxqfT/JPHP1TKBYQDUvqLICSC+w/CQRa9mq8WRJY73xUN1Rwo8pbDfM7im6+cRaAUBFfqzddShriYrD0yNsXbVxbvaAVuD/+zDw2xf6SPkYGNS9bWs1dfi41YS9FsPUC1OZpt5bZvgv9quqJB0nl33L08SK42rbO6Vz29kCMcCGBwk4IigAPvp3LctytRsQBnNlMgXcgTLOv1Oxhu7Y4t6rF3R0PMeqtTi0FkLlMgHBAefvaVJc8XbEM4YFZsf3H/21TZvPwrs7X35qtXp2YLDpZjeOzDt/Dn77zPkbEkx88vTtYGBDojITqjQQIiDHbH+OX9u+v4P+rayF59LTZiwVWz9QDV5mi2ldstE/xTWYuBrmgpETuZypG1bBwDu6sqOJYPp1T3qs9PLdAXDzObsXFwh3MMBsum9J9UPmT06O/+d84n02VDRDFCQSESDFQ8d6Zgu38VBITZTIGuaAiDO2S01PlikPmtP3p7yUBxKblAciG/5P63a9lUZN9IH1/iDr5z7CLjM2kiQXea4z99+Z1FydrhgU52J+K8fWWWjnCAjkiw9GJRl5r1+3Zx8M6tFXVwNrJXX6t67+fQbD1AtTmabeV2ywR/24GBriipbIErM1lE3D1Xc5ZZVOZ4aiHHQs7mqf9wEhHcRWERt3cdDgRI5Wxu7Y0xmcqRtx2CIty2tXPJ/6SvfOKDS64WXqrHDpDojPKn/7u78UzedpY9X7Tr1cpAYTuGhVyBga4YM+n8kt+L5Xrz1QE6V7B5/ZK7svbqXNarmnqjdk4kFPCStX3sH+lne08MuBG0r81l2H6TU0OPjSX5plezvi8eYTab57kfnWV7T+vXrG+2HqDaPM20MVRNwV9EHgW+AQSBPzDGfK3q/EHg94B7gSeMMS/VuZ2rMri9p+IMnIAIjgOxkDvds1jmeGohx0Qqz9auCOm8RUCEK7PucEhPR5htPVHGZ7IEA8LwQGfpF/M3Ht275Ndd7tV8uR57LQneck8dHOGrf/Q2tlMgEgyQKdir9rSLvfmlAvT7c9lSGYXXL80sKtQ22B0tlVH4yK5eYkska/eN9K052Bfn1Rd79P/vG5fpiARLL2pdwUDbjHs3Ww9QtadVg7+IBIHngI8D48BxETlkjPlp2WUXgV8F/o+NaCS4Y+qr7Q5VsA1ZyyYUcAO/bQxB3ERwrmA4fW0O27gbw0RDQaKhIJZjEOPWhu/pCBMKBrhzsGtN9XuWejWv7rFDbQne8j/903mLvbf08PlHbl9zT7sYoG3HcOrKLEfGkjz/F2Ocu165sjYgcPetPV7A72eoP16XZO1yq2WLxmfau2Z9M/UAVXuqpee/DzhrjBkDEJEXgceBUvA3xpz3zm1YUZhatgWcTGWxneK17vW2uDV/XIIYgwTc3n6iI8xMxgIMedutBlpcB7DeX8zqP+2nFnIkFwrMpPN84vdeJZUtcHUuRzgobOuOEgoGKNiG/cMJPv37f8X4dLoi0K+lpz2bKXD8fLKUrE1VJWt7YiH2Dfexf7ifB4cSpeGwm1Xdq19utWw5HfdWqrFqCf47gEtlH48D+2/mi4nIk8CTALt3139mSKaw+LXHGLBxXwCCIjji1vkR404BvbU3xrXZLAYY7I7V7c/v8j/tz0ykSGUtEvEw0VCgtOagLx4ilbUZn8lw20AnP3/3Nr57YpxQQEpDVKuttnXv0TA2uVDa5OSdq3OLkrUjWztLK2s/eEvPuhKp9ahsqePeSjXWpiZ8jTEvAC+AW9J5M782AiJuL9WtYu329oMBYbAnVirnfPj0xKK1AutZYXtpOk3eckjEw2ztjjE2Oe8GXgMLOZuRrV3M5wrEI2GOnZtedrUtUDEz5kO3dvOX7yW5NpfBcsyi8hfRUID7dve6u1oN9zHoJWvX/G0rq2x57FySP/yr84zPZGr63qy0OE3HvZVqrFqC/2WgPLu40zvmK45x/wqIhQJ0RUNMpHIY3BINn3t4uK71daqf5+pshkzBJhoKkrcdMIaCA9hw7vo8iXiYa3MZDCw5P/9CcoFvvHIGjMFxDKeuzvLG+Myir5uIhzl4x1YO3NbHR3b2Er2JlbXL9eoPn57g//7+6Zq/N7V8L3XcW6nGqaWq1nHgDhEZFpEI8ARwaGObtTEsxyEeCXB93g38AXErf377yIVSL7U4PXM+Z3FtNsvlmTRffPF1Dp+eqPnrlD+PiBALBTHGMJnKEsDdaxjcekWWY3h/Lkc8EuKWno6KTciNMcyk3Z20JlM5rs7lmJzPV/TyO8IBBjojbO+JsjsR50sfu4P9w/01BX4RIRoOsqUjzGBPjN19cXb3xxnsibElHiYWDpaGc6rvKR4JlUpe1PI9WO16pdTmWrXnb4yxROQLwA9wp3p+yxhzSkSeAU4YYw6JyIPAfwUSwC+KyD82xty9oS2/CbaByXl3HntI3P1ujQMz6QJf+/47zOdtejvCi9YKpPM2/+dLby7aEWy5Hu9rF6dxjLvoq78zQl9nhKszGXKWQ/lQu+FGtdKFXIEn/6cRfveHP2MhZ5G3HRbyNtUbrQXF/Sum+Dy7vASpwZ3OupJQwF0tG7uJsfq1rkrVVaxKNbeaxvyNMS8DL1cde7rs8XHc4aCmJlDag9fg9vqLwfW96wuM7uljIpVdtFYgFGDJHcGqhzyKQx0Yd4ypYDlcmc0w2B0j0RkmnXfIFGxCASifXi/ARCrPvzp8tjQcVa4jHCQcFLZ0hImFAozPZCjYDuGyGTXVK3iLY/XFGTjr3YVqrbNzdDaPUs2trfakKw+qtvHyANzogW/viZTWCoChYDvkbYes5ZSSqisNYfz+f3+PgMBAdxQQjLiB/fpCjlAwyFc/eRf37uhF8LadlBvtMsDFaXfcPxYK8Ndv6+fLH7+T7z55gN/+1F10Rr0gKm4dI8e4+w0Y3FLVtmP41b+2h/7OKLf2djDUH2dHbwcDXVG6oqF1181/6uAIBW86rLs3gLXi7Jy1Xq+U2lwtU96hHv74rWt86p7tXJ7JkLPclwp3X2CX4xh+dm0Ohxs1eODGVojnpxboiYWIBEMM9kByIU/eMgQM/Mr+PYzPpFnIWywxI5WgQDQc5Ld/8S4+vLOXSOhGsN7aHa1Ysbsj0ckvfaSX1y/NcnXWnXnzd3/utg1Nnq51do7O5lGquYmpHlTeJKOjo+bEiRM1Xz/0lT/ZwNbcEA0F6OsMc3U2t+R5Efcay3YIiPB//dI9PDCUAODL332zVFCtuHnMbMYdv89ZS69/CwWkNP9/oCvG7/ztDy+6JlKx3WCw4oVBKdVeROSkMWZ0vc+jPf8qtmMY6IoxkcpjjCklV4uLpowBx0vS9sRC/MejF0vB/1P33sK/+NFZrs/nyXkVRcv1doTZN9zHQGeEP3n7Kpm8O1wzmynQGQ3xhQd3lerVnzw3zbePXODyTJrdfZ3aa1ZK1ZUG/yrFyS+xUMCt+4M7RRRuvAAEg0JX2C0d/eb4DL/8b44SDgrj3ph9uR29MT66d5ADI/18YHs3ARGOjSX5/qlrZQvP3Lf+rghDA50cPj3B1//bu4SDQiIe0Z2elFJ1p8G/SsE2XJvNsLU7yqVkmvKFswFgsCdK3nKYThdKgf7a3I0plrFwgAf2JDgw7O5ZW755fLEGzkuvjdMbD7Ojt6M01TKdt/jWX57n43dv152elFIbToP/Eibn88xmCpWB3xv6uTa3OBcQDrpBfVt3jOf+1/tLY/LBgHjTLCvn1V+bc3cbm89ZpT0DyhPIrThHXjcsV6q5aPBfRt6L/MWgv1RRUfHOb+2K0hkNMp+1GOiOlubWh5eZXrkrEef81DxT84XSxu8Fx5DKWhw+PdFyc+R1w3Klmo9OG1nFSpWkg+JWCp1J57Edw9BAFwNdUbpj4WUDP7hz4JMLBQxuTsF4E4ES8TDPvzpWmiN/fT7LexMpfnp1lvHpDA+tcQOVZqGlHpRqPhr8b0Lxm2YDEnD/SrAcal7A9MjeQbqiQSLBALYxhILCrVvcBVnj02ke2TvIp+/fQXKhQN42xEJBEvEwL712eU01hprFpel0xX7C4P9hLKX8Tod9boZAWNztIS3H0BkJlUpC1+rObT2LhnbSeas0tPPjsSQ7Ex2Lzvsx6dtqw1hKtQLt+S8jtES9s6B3zDHeYq9wgB29cb75xH1rDsirlT9opd6ylnpQqvlo8PcEcGftBANCALfUQtSbxRMKCIJbBTTk1eSxjWGoL77mHn/RI3sHeeaxuxnsjjGbKTDYHat4rl2JOJmCXfE5fu0tr3avSqnNp8M+Hge4tSvC33pwN98+coH5nIVlwLHdbGxQKJVo2Lklyj/9m/euO3ittJlJq21zqBu3KNVcNPiXGZ/N8S9fOeMGfeNO5QS3sFuximZ3LEQguPYdstZKC6MppTaSBv8qeW/aZSwUwBi35n9A3PH2ka1dwOYlXrW3rJTaKBr8lyEiiIDxht3z9o2qnH5NvCqlVJEG/2VkC3apyJsxEClbtOXXxKtSShVp8F9B+VYH3bFQqUa/nxOvSikFGvyXVNy9qxj7BzrDDA90aeJVKdUy2jb4h71RHMtxg3xxX91E3N1oPW87RIIBBroiOAa+8+SBRjZXKaXqqm2Cv8iNqZudkSCDPbGK+fPPPHY3z786xkQqy/YtlSUVBrtjjWm0UkptkLYJ/qGAEAkG6I6FSMQj9MYjpWGch0b6eP7VMc5MpEhlLRLxMANdUR3fV0q1rLYJ/nu39wBgjLtn7vd//SBQWWt+e0+McDBHcqGAZTvcsa1Hx/eVUi2pLYJ/NHijSlv1NM3qLRMHumLEIyEGu2M6zq+UalltUdgt0RlZtppkK1XPVEqpWrVs8A8IxMMBemIhhge6lq0m2UrVM5VSqlYtO+zTEQ6yfUts1eGbVqueqZRStWjZnn/OcmoK4lprXinVjlq25x+PBGsO4lo9UynVblqy5x8NBW5qa0WllGoXLRf8A8DnH7lNA79SSq2g5YL/B7Z388WP3dnoZiilVFPzTfB/aDix6jU90QDzOWsTWqOUUv7mm+D/naf+2qrX5B10fr5SStXAN8G/FrmCo/PzlVKqBi0V/DsiQU30KqVUDVoq+McjwdUvUkop1VrB/47B7kY3QSmlfKGm4C8ij4rIuyJyVkS+ssT5qIh81zt/VESG6t7SGuh4v1JK1WbV4C8iQeA54BPAXcBnROSuqst+DZg2xtwO/C7wbL0bOvSVP1nxfFDQ8X6llKpRLT3/fcBZY8yYMSYPvAg8XnXN48Afeo9fAn5eRIRNdOc2HfJRSqla1RL8dwCXyj4e944teY0xxgJmgf7qJxKRJ0XkhIicmJycvLkWL+M3Ht1b1+dTSqlWtqkJX2PMC8aYUWPM6NatW+v63Drko5RStasl+F8GdpV9vNM7tuQ1IhICtgBT9WigUkqp+qsl+B8H7hCRYRGJAE8Ah6quOQR81nv8aeAVY4ypXzPh/Nc+eVPnlFJKLbbqZi7GGEtEvgD8AAgC3zLGnBKRZ4ATxphDwL8F/r2InAWSuC8QdadBXiml6qOmnbyMMS8DL1cde7rscRb4X+rbNKWUUhulpVb4KqWUqo0Gf6WUakMa/JVSqg1p8FdKqTYkdZ6RWfsXFpkELtzkpw8A1+vYHD/Re29f7Xz/eu837DHGrHuVbMOC/3qIyAljzGij29EIeu/tee/Q3vev917/e9dhH6WUakMa/JVSqg35Nfi/0OgGNJDee/tq5/vXe68zX475K6WUWh+/9vyVUkqtgwZ/pZRqQ74L/qttJu8XIvItEZkQkbfLjvWJyJ+JyBnvfcI7LiLyTe+efyIi95d9zme968+IyGfLjj8gIm95n/PNzd5WcyUisktEfiQiPxWRUyLyJe94y9+/iMRE5JiIvOnd+z/2jg+LyFGvvd/1yqcjIlHv47Pe+aGy5/pH3vF3ReRvlB1v6t8REQmKyOsi8sfex21x7yJy3vuZfENETnjHGvczb4zxzRtuSen3gBEgArwJ3NXodt3kvRwE7gfeLjv2deAr3uOvAM96j38B+D4gwAHgqHe8Dxjz3ie8xwnv3DHvWvE+9xONvuey+7wFuN973A38DLirHe7fa0+X9zgMHPXa+T3gCe/4vwb+nvf47wP/2nv8BPBd7/Fd3s9/FBj2fi+CfvgdAb4M/Cfgj72P2+LegfPAQNWxhv3M+63nX8tm8r5gjHkVd++Dco8Df+g9/kPgl8qOf9u4jgC9InIL8DeAPzPGJI0x08CfAY9653qMMUeM+1Px7bLnajhjzFVjzGve4xTwDu4+0C1//949zHsfhr03A3wUeMk7Xn3vxe/JS8DPez26x4EXjTE5Y8w54Czu70dT/46IyE7gk8AfeB8LbXLvy2jYz7zfgn8tm8n72TZjzFXv8TVgm/d4ufte6fj4Esebjven/H24PeC2uH9v2OMNYAL3l/c9YMYYY3mXlLe3dI/e+Vmgn7V/T5rF7wH/EHC8j/tpn3s3wH8TkZMi8qR3rGE/8zVt5qI2nzHGiEhLz8MVkS7g/wF+3RgzVz5E2cr3b4yxgY+ISC/wX4G9jW3R5hCRTwETxpiTIvJIg5vTCA8bYy6LyCDwZyJyuvzkZv/M+63nX8tm8n72vvfnG977Ce/4cve90vGdSxxvGiISxg38/9EY81+8w21z/wDGmBngR8BDuH/WFztj5e0t3aN3fgswxdq/J83grwOPich53CGZjwLfoD3uHWPMZe/9BO6L/j4a+TPf6CTIGhMmIdwExzA3Ejp3N7pd67ifISoTvv+MyuTP173Hn6Qy+XPM3Ej+nMNN/CS8x31m6eTPLzT6fsvuU3DHJH+v6njL3z+wFej1HncAfwF8CvjPVCY9/773+PNUJj2/5z2+m8qk5xhuwtMXvyPAI9xI+Lb8vQOdQHfZ478CHm3kz3zDvyk38U38BdzZIe8Bv9no9qzjPr4DXAUKuONzv4Y7nvnnwBngh2X/qQI8593zW8Bo2fP8HdyE11ngfys7Pgq87X3Ov8Rbzd0Mb8DDuOOfPwHe8N5+oR3uH7gXeN2797eBp73jI94v71ncYBj1jse8j89650fKnus3vft7l7KZHX74HaEy+Lf8vXv3+Kb3dqrYtkb+zGt5B6WUakN+G/NXSilVBxr8lVKqDWnwV0qpNqTBXyml2pAGf6WUakMa/JVSqg1p8FdKqTb0/wM/I9rVVCeerwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "most_freq = train['item_id'].value_counts()[train['item_id'].value_counts() > 10]\n",
    "label_mean = train.groupby(['item_id'])['label'].mean().loc[most_freq.index]\n",
    "\n",
    "sns.regplot(x=most_freq.values, y=label_mean.values)\n",
    "# 热门的item更加容易被下单"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "id": "1612a5be",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 5))\n",
    "most_freq = train['category_l1_name'].value_counts()[train['category_l1_name'].value_counts() > 10]\n",
    "label_mean = train.groupby(['category_l1_name'])['label'].mean().loc[most_freq.index]\n",
    "plt.subplot(131)\n",
    "sns.regplot(x=most_freq.values, y=label_mean.values)\n",
    "\n",
    "most_freq = train['category_l2_name'].value_counts()[train['category_l2_name'].value_counts() > 10]\n",
    "label_mean = train.groupby(['category_l2_name'])['label'].mean().loc[most_freq.index]\n",
    "plt.subplot(132)\n",
    "sns.regplot(x=most_freq.values, y=label_mean.values)\n",
    "\n",
    "most_freq = train['category_l3_name'].value_counts()[train['category_l3_name'].value_counts() > 10]\n",
    "label_mean = train.groupby(['category_l3_name'])['label'].mean().loc[most_freq.index]\n",
    "plt.subplot(133)\n",
    "sns.regplot(x=most_freq.values, y=label_mean.values)\n",
    "\n",
    "plt.tight_layout()\n",
    "\n",
    "# 热门的category更加容易被下单"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "id": "71598645",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 141,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "most_freq = train['voucher_benefit_amount'].value_counts()[train['voucher_benefit_amount'].value_counts() > 10]\n",
    "label_mean = train.groupby(['voucher_benefit_amount'])['label'].mean().loc[most_freq.index]\n",
    "\n",
    "sns.regplot(x=most_freq.values, y=label_mean.values)\n",
    "# voucher_benefit_amount越大，更加容易被下单"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "id": "cd08f152",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "most_freq = train['gender'].value_counts()[train['gender'].value_counts() > 10]\n",
    "label_mean = train.groupby(['gender'])['label'].mean().loc[most_freq.index]\n",
    "\n",
    "sns.barplot(x=most_freq.index, y=label_mean.values)\n",
    "# gender 与 下单概率存在一定关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 342,
   "id": "22775686",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import networkx as nx\n",
    "G = nx.Graph()\n",
    "\n",
    "for idx in range(500):\n",
    "    G.add_edge(uu_graph['left_user_id'].iloc[idx], uu_graph['right_user_id'].iloc[idx])\n",
    "nx.draw(G, with_labels=False, font_weight='bold', node_size=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 355,
   "id": "eb160f62",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import networkx as nx\n",
    "G = nx.Graph()\n",
    "\n",
    "for idx in range(100):\n",
    "    G.add_node(mkt_kg_graph['source_entity_id'].iloc[idx], \n",
    "               entity_type = mkt_kg_graph['source_entity_type'].iloc[idx])\n",
    "    G.add_edge(mkt_kg_graph['source_entity_id'].iloc[idx], mkt_kg_graph['target_entity_id'].iloc[idx])\n",
    "\n",
    "    \n",
    "nx.draw(G, font_weight='bold', node_size=20,)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aae7602b",
   "metadata": {},
   "source": [
    "## Part4 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 311,
   "id": "feae09bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "## \n",
    "train['item_id_freq'] = train['item_id'].map(train['item_id'].value_counts())\n",
    "test['item_id_freq'] = test['item_id'].map(train['item_id'].value_counts())\n",
    "\n",
    "train['item_id_target'] = train['item_id'].map(train.groupby(['item_id'])['label'].mean())\n",
    "test['item_id_target'] = test['item_id'].map(train.groupby(['item_id'])['label'].mean())\n",
    "\n",
    "## \n",
    "train['category_l1_freq'] = train['category_l1_name'].map(train['category_l1_name'].value_counts())\n",
    "test['category_l1_freq'] = test['category_l1_name'].map(train['category_l1_name'].value_counts())\n",
    "\n",
    "train['category_l1_target'] = train['category_l1_name'].map(train.groupby(['category_l1_name'])['label'].mean())\n",
    "test['category_l1_target'] = test['category_l1_name'].map(train.groupby(['category_l1_name'])['label'].mean())\n",
    "\n",
    "##\n",
    "train['category_l2_freq'] = train['category_l2_name'].map(train['category_l2_name'].value_counts())\n",
    "test['category_l2_freq'] = test['category_l2_name'].map(train['category_l2_name'].value_counts())\n",
    "\n",
    "train['category_l2_target'] = train['category_l2_name'].map(train.groupby(['category_l2_name'])['label'].mean())\n",
    "test['category_l2_target'] = test['category_l2_name'].map(train.groupby(['category_l2_name'])['label'].mean())\n",
    "\n",
    "##\n",
    "train['category_l3_freq'] = train['category_l3_name'].map(train['category_l3_name'].value_counts())\n",
    "test['category_l3_freq'] = test['category_l3_name'].map(train['category_l3_name'].value_counts())\n",
    "\n",
    "train['category_l3_target'] = train['category_l3_name'].map(train.groupby(['category_l3_name'])['label'].mean())\n",
    "test['category_l3_target'] = test['category_l3_name'].map(train.groupby(['category_l3_name'])['label'].mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 305,
   "id": "87266a9b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0          0.075005\n",
       "1          0.116020\n",
       "2          0.090562\n",
       "3          0.116020\n",
       "4          0.110092\n",
       "             ...   \n",
       "1043210    0.123769\n",
       "1043211    0.110240\n",
       "1043212    0.082492\n",
       "1043213    0.078318\n",
       "1043214    0.116020\n",
       "Name: item_id, Length: 1043215, dtype: float64"
      ]
     },
     "execution_count": 305,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['item_id'].map(train.groupby(['item_id'])['label'].mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "980555d0",
   "metadata": {},
   "source": [
    "## Part5 训练与验证\n",
    "\n",
    "- GAUC评价指标的定义\n",
    "- 数据划分方法，需要考虑用户、时间、和记录"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 306,
   "id": "427a61a4",
   "metadata": {},
   "outputs": [],
   "source": [
    "def gauc(val_pred):\n",
    "    '''\n",
    "    val_pred: 'user_id', 'item_id', 'label', 'pred'\n",
    "    '''\n",
    "    \n",
    "    user_auc = []\n",
    "    for df in val_pred.groupby('user_id'):\n",
    "        try:\n",
    "            score = roc_auc_score(df[1]['label'], df[1]['proba'])\n",
    "            user_auc.append([score, df[1].shape[0]])\n",
    "        except:\n",
    "            pass\n",
    "\n",
    "    user_auc = pd.DataFrame(user_auc)\n",
    "    user_auc = (user_auc[0] * user_auc[1]).sum() / user_auc[1].sum()\n",
    "\n",
    "    item_auc = []\n",
    "    for df in val_pred.groupby('item_id'):\n",
    "        try:\n",
    "            score = roc_auc_score(df[1]['label'], df[1]['proba'])\n",
    "            item_auc.append([score, df[1].shape[0]])\n",
    "        except:\n",
    "            pass\n",
    "\n",
    "    item_auc = pd.DataFrame(item_auc)\n",
    "    item_auc = (item_auc[0] * item_auc[1]).sum() / item_auc[1].sum()\n",
    "    \n",
    "    return user_auc, item_auc, (user_auc + item_auc) / 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 312,
   "id": "9544d8f9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1005761, 23) (37454, 23)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import KFold\n",
    "from sklearn.metrics import roc_auc_score\n",
    "\n",
    "user_kf = KFold(n_splits=10, shuffle=True, random_state=123)\n",
    "train_unique_users = train['user_id'].unique()\n",
    "\n",
    "feature_name = [\n",
    "    'gender', 'age', 'occupation', \n",
    "    'category_l1_name', 'category_l2_name', 'category_l3_name', \n",
    "    'voucher_benefit_floor_amount', 'voucher_benefit_amount',\n",
    "    \n",
    "    'item_id_freq', 'item_id_target',\n",
    "    'category_l1_freq', 'category_l1_target',\n",
    "    'category_l2_freq', 'category_l2_target',\n",
    "    'category_l3_freq', 'category_l3_target'\n",
    "]\n",
    "\n",
    "for user_train_idx, user_val_idx in user_kf.split(train_unique_users, train_unique_users):\n",
    "    user_train = train_unique_users[user_train_idx]\n",
    "    user_val = train_unique_users[user_val_idx]\n",
    "    \n",
    "    # 验证集选择用户最后的3条记录\n",
    "    val_idx = train[train['user_id'].isin(user_val)].groupby('user_id').tail(3).index\n",
    "    train_idx = [x for x in train.index if x not in train_val_idx]\n",
    "    \n",
    "    print(train.iloc[train_idx].shape, train.iloc[val_idx].shape)\n",
    "    break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 313,
   "id": "69a0dad3",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/f17g5vivd4/.local/lib/python3.6/site-packages/lightgbm/basic.py:2065: UserWarning: Using categorical_feature in Dataset.\n",
      "  _log_warning('Using categorical_feature in Dataset.')\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "LGBMClassifier(max_depth=5)"
      ]
     },
     "execution_count": 313,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = LGBMClassifier(max_depth=5)\n",
    "model.fit(train.iloc[train_idx][feature_name], train.iloc[train_idx]['label'],\n",
    "         categorical_feature=['occupation', 'category_l1_name'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 314,
   "id": "a8afe222",
   "metadata": {},
   "outputs": [],
   "source": [
    "val_pred = train.iloc[train_val_idx][['user_id', 'item_id', 'label']].copy()\n",
    "val_pred['proba'] = model.predict_proba(train.iloc[val_idx][feature_name])[:, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 315,
   "id": "d862995c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.5912132352941176, 0.5357119305002072, 0.5634625828971624)"
      ]
     },
     "execution_count": 315,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gauc(val_pred)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
